
abstract class TestAbstract {
  val name: String

  def hello(): Unit
}

/**
 * （1）如果父类为抽象类，那么子类需要将抽象的属性和方法实现，否则子类也需声明为抽象类
 * （2）重写非抽象方法需要用override修饰，重写抽象方法则可以不加override。
 * （3）子类中调用父类的方法使用super关键字
 * （4）子类对抽象属性进行实现，父类抽象属性可以用var修饰；
 * 子类对非抽象属性重写，父类非抽象属性只支持val类型，而不支持var。
 * 因为var修饰的为可变变量，子类继承之后就可以直接使用，没有必要重写
 * */
class Teacher extends TestAbstract {
  val name: String = "teacher"

  def hello(): Unit = {
    println("hello teacher")
  }
}

object TestAbstract {
  def main(args: Array[String]): Unit = {
    val teacher = new Teacher
    println(teacher.name)
    teacher.hello()
  }
}